package service

import (
	"go-admin/app/monitor/models"
	"strings"

	"github.com/go-admin-team/go-admin-core/sdk/service"
)

// go-admin 封装的业务实现层必备结构体
type SysApi struct {
	service.Service
}

//  获取monitor 数据库下所有数据库的名字
func (e *SysApi) GetTables(result *[]string) error {
	var err error

	e.Orm.Exec("use information_schema;") // 切换数据库
	err = e.Orm.Table("tables").Select("table_name").Where("table_schema=?", "monitor").Scan(result).Error
	if err != nil {
		e.Log.Errorf("Service GetSysApiPage error:%s", err)
		return err
	}
	return nil
}

// 获取资源使用情况
func (e *SysApi) GetPercent(tables *[]string, result *[]models.Computer) error {
	var err error

	e.Orm.Exec("use monitor;") // 每次还要切回来
	for _, table := range *tables {
		// 模板不需要采样
		if table == "template" {
			continue
		}
		computer := new(models.Computer)               // 每次需要new,否则会覆盖上一个的数据
		err = e.Orm.Table(table).Last(&computer).Error // 这里就是查询满足条件的第一条数据
		if err != nil {
			e.Log.Errorf("Service GetPercent error:%s", err)
			return err
		}

		computer.TableName = changeTableName(table)
		*result = append(*result, *computer)
	}
	return nil
}

// 将表名转换成对应的服务器中文名，便于认识
func changeTableName(table string) string {
	switch table {
	case "127.0.0.1":
		return "本机"
	default:
		tempList := strings.Split(table, "_")
		if len(tempList) == 4 {
			return tempList[3]
		} else {
			return table
		}
	}
}
